Go類型轉換

由于Go語言不存在隱式類型轉換,因此所有的類型轉換都必須顯式的聲明。

string、int、float類型相互轉換

string轉其他

  • string轉成int:
int, err := strconv.Atoi(string)
  • string轉成int64:
// 參數1:帶轉換字符串,// 參數2:基于幾進制,值可以是0,8,16,32,64// 參數3:要轉成哪個int類型:可以是0、8、16、32、64,分別對應 int,int8,int16,int32,int64int64, err := strconv.ParseInt(string, 10, 64)
  • string轉成uint64:
uint64, err := strconv.ParseUint(string, 10, 64)
  • string轉成float64、float32
// ParseFloat 將字符串轉換為浮點數// str:要轉換的字符串// bitSize:指定浮點類型(32:float32、64:float64)// 如果 str 是合法的格式,而且接近一個浮點值,// 則返回浮點數的四舍五入值(依據 IEEE754 的四舍五入標準)// 如果 str 不是合法的格式,則返回“語法錯誤”// 如果轉換結果超出 bitSize 范圍,則返回“超出范圍”//到float64float64,err := strconv.ParseFloat(str,64)//到float32float32,err := strconv.ParseFloat(str,32)

int、int64、uint64轉其他

  • int轉成string:
string := strconv.Itoa(int)// 或者:先把int轉為int64string := strconv.FormatInt(int64(int), 10)
  • int64轉成string:
string := strconv.FormatInt(int64,10)
  • uint64轉成string:
string := strconv.FormatUint(uint64,10)
  • int轉float32
float := float32(int)

float轉其他

  • float轉成string
// FormatFloat 將浮點數 f 轉換為字符串值// f:要轉換的浮點數// fmt:格式標記(b、e、E、f、g、G)// prec:精度(數字部分的長度,不包括指數部分)// bitSize:指定浮點類型(32:float32、64:float64)// 格式標記:// 'b' (-ddddp±ddd,二進制指數)// 'e' (-d.dddde±dd,十進制指數)// 'E' (-d.ddddE±dd,十進制指數)// 'f' (-ddd.dddd,沒有指數)// 'g' ('e':大指數,'f':其它情況)// 'G' ('E':大指數,'f':其它情況)// 如果格式標記為 'e','E'和'f',則 prec 表示小數點后的數字位數// 如果格式標記為 'g','G',則 prec 表示總的數字位數(整數部分+小數部分)str1 = strconv.FormatFloat(11.34,'E',-1,32)str2 = strconv.FormatFloat(10.55,'E',-1,64)fmt.Println(str1,str2) ? ? ? ?//1.134E+01 ?1.055E+01//解析轉換后的string變量str為floath,_ :=strconv.ParseFloat(str1,32)fmt.Println(h) ? ? ? ?//11.34000015258789h,_ =strconv.ParseFloat(str2,64)fmt.Println(h) ? ? ? ?//10.55
  • float轉int64(會有精度損失)
var x float64 = 6.9y := int64(x)

類型斷言

  • 類型斷言的本質,跟類型轉換類似,都是類型之間進行轉換,不同之處在于,類型斷言是在接口之間進行。類型轉換在編譯期完成,類型斷言在運行時確定,包括安全類型斷言和非安全類型斷言。
  • 語法:

  <目標類型的值>,<布爾參數> := <表達式>.( 目標類型 ) // 安全類型斷言

  <目標類型的值> := <表達式>.( 目標類型 )  //非安全類型斷言

var a interface{}value, ok := a.(string)if !ok {fmt.Println("It's not ok for type string")return}fmt.Println("The value is ", value)
  • 可以配合switch語句進行判斷
var t interface{}t = functionOfSomeType()switch t := t.(type) {case bool:fmt.Printf("boolean %t\n", t) ? ? ? ? ? ? // t has type boolcase int:fmt.Printf("integer %d\n", t) ? ? ? ? ? ? // t has type intcase *bool:fmt.Printf("pointer to boolean %t\n", *t) // t has type *boolcase *int:fmt.Printf("pointer to integer %d\n", *t) // t has type *int}default:fmt.Printf("unexpected type %T", t) ? ? ? // %T prints whatever type t has

時間與時間戳

時間類型

獲取當地時間,獲取時間的函數為?time.now()?,這里加不加?.Local()?,獲取的都是當地時間。加?.UTC?得到的是0時區(也就是倫敦)的時間。?func Now() Time?這個函數的返回值是?Time?,也就是時間類型。例如:

fmt.Println(time.Now())fmt.Println(time.Now().Local())fmt.Println(time.Now().UTC())fmt.Println(time.Now().Location())// 輸出2018-11-21 11:50:39.540473 +0800 CST m=+0.0003115622018-11-21 11:50:39.540628 +0800 CST2018-11-21 03:50:39.540632 +0000 UTCLocal

時間戳

時間戳函數的返回值都是?int64?,是一個大整數。時間戳就是格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起到此時此刻的【總秒數】。

fmt.Println(time.Now().Unix())fmt.Println(time.Now().Local().Unix())fmt.Println(time.Now().UTC().Unix())fmt.Println(time.Now().UnixNano())// 輸出1542772752154277275215427727521542772752846107000

在go語言中,?time.Now().Unix()?或者?time.Now().Local().Unix()?就是【北京時間1970年01月01日08時00分00秒】到【北京時間此時此刻】的總秒數。

相應的?time.Now().UTC().Unix()?就是【格林威治時間1970年01月01日00時00分00秒】到【格林威治時間此時此刻】的總秒數。因此上面得到的幾個時間戳是一樣的。時間戳是一個【總秒數】,所以時間戳函數的返回值都是?int64?。所以go語言中有時間類型,但并沒有一個單獨的【時間戳類型】。

時間類型格式化

將時間類型格式化,得到一個表示時間的字符串。第一行是?time.Now()?的結果,是時間類型【?Time?】下面兩行是?t.Format()?的結果,是字符串。

t := time.Now()str := t.Format("2006-01-02 15:04:05")str1 := t.Format("2006年1月2日 15:04:05")fmt.Println(t)fmt.Println(str)fmt.Println(str1)// 輸出2018-11-21 12:48:19.870047 +0800 CST m=+0.0005037402018-11-21 12:48:192018年11月21日 12:48:19

字符串轉Time

函數?func Parse(layout, value string) (Time, error)?的第一個參數是需要轉換的字符串的格式,第二個參數是需要轉換的字符串。返回值是時間類型和一個err。

t := time.Now()str := t.Format("2006-01-02 15:04:05")str1 := t.Format("2006年1月2日 15:04:05")timestamp, _ := time.Parse("2006-01-02 15:04:05", str)timestamp1, _ := time.Parse("2006年1月2日 15:04:05", str1)fmt.Println(timestamp)fmt.Println(timestamp1)// 輸出2018-11-21 12:48:19 +0000 UTC2018-11-21 12:48:19 +0000 UTC

在將字符串轉為時間類型的時候,是直接轉為了【倫敦時間】,go語言并不會去判斷這個字符串表示的是北京時間,還是倫敦時間,因為沒法判斷,只有你知道它表示的是哪里的時間。比如?16:08:05?在中國那當然表示的是北京時間,但是如果把這個字符串轉為時間類型,就直接變成倫敦時間的?16:08:05?了。

Time轉時間戳

直接調用方法?func (t Time) Unix() int64?即可。將上面的兩個時間變量?timestamp?和?timestamp1?轉為時間戳。

fmt.Println(timestamp.Unix())fmt.Println(timestamp1.Unix())// 輸出15428044991542804499

時間戳轉Time

用函數?func Unix(sec int64, nsec int64) Time?進行轉換,第一個參數是秒,第二個參數是納秒,會被加到結果的小數點后面。

tmsp := time.Now().Unix()fmt.Println(tmsp)t1 := time.Unix(tmsp, 0).UTC()t2 := time.Unix(tmsp, tmsp).Local()fmt.Println(t1)fmt.Println(t2)// 輸出15427797082018-11-21 05:55:08 +0000 UTC2018-11-21 13:55:09.542779708 +0800 CST

這里的轉換可以選擇是轉換為當地時間還是倫敦時間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443266.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux tee 重定向_快樂的linux命令行-重定向

整理自《快樂的linux命令行一書》。linux系統版本&#xff1a; Ubuntu 17.04本章&#xff0c;我們將介紹命令行最酷的特性&#xff0c;叫做I/O重定向&#xff0c;通過這個工具&#xff0c;可以重定向命令的輸入輸出&#xff0c;命令的輸入來自文件&#xff0c;而輸出也存到文。…

Java 診斷工具 Arthas 常見命令

基本概念 云原生這么多微服務&#xff0c;當然需要一個診斷利器來排查問題。 Arthas 是阿里開源的 Java 診斷工具&#xff0c;深受開發者喜愛。在線排查問題&#xff0c;無需重啟&#xff1b;動態跟蹤 Java 代碼&#xff1b;實時監控 JVM 狀態。Arthas 支持 JDK 6&#xff0c…

28和lba48命令格式區別_編譯Sass(命令行)

本文作者&#xff1a;開課吧無憂圖文編輯&#xff1a;開三金sass編譯有很多種方式&#xff0c;如命令行編譯模式、編輯器自動編譯、編譯軟件koala、sass-loader等。今天我們就先來看第一種&#xff1a;命令行編譯剛才我在test文件夾里面已經建立了一個style.scss文件&#xff0…

JAVA基礎編程代碼50個

【程序1】 題目&#xff1a;古典問題&#xff1a;有一對兔子&#xff0c;從出生后第3個月起每個月都生一對兔子&#xff0c;小兔子長到第三個月后每個月又生一對兔子&#xff0c;假如兔子都不死&#xff0c;問每個月的兔子對數為多少&#xff1f; 程序分析&#xff1a; 兔子…

爬蟲軟件python功能_Python 網絡爬蟲程序詳解

#!/usr/bin/python #調用pythonfrom sys import argv #導入sys是導入python解釋器和他環境相關的參數from os import makedirs,unlink,sep  #os主要提供對系統路徑&#xff0c;文件重命名和刪除文件所需的函數#makedirs是創建遞歸文件夾的函數。#比如說我們要創建一個新的目錄…

價錢轉換python_如何在python中轉換貨幣?

我正在做一個虛擬助手項目。我想讓它告訴我其他貨幣的美元匯率。我用beauthoulsoup編寫了以下代碼&#xff0c;它從給定的網站獲取數據&#xff0c;對其進行解析并在命令行中打印結果供我閱讀。但這只是美元對巴基斯坦盧比。如何修改程序&#xff0c;使其接受任何貨幣并告訴我該…

char qt 轉unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 亂碼與轉碼問題...

2012-03-22 14:00175人閱讀評論(0)代碼如下&#xff1a;如果不不設全局的字符集是utf-8&#xff0c;那么網上一般的方法是可以轉的。如下程序中 #define DD 1的情況下&#xff1b;但是如果設置了全局的utf-8&#xff0c;再用以前的方法&#xff1a;QByteArraybaaaa.toLatin1();…

計算機圖形學考試題及答案_計算機圖形學考試題及答案

3、在圖形文件中&#xff0c;常用來描述圖形元素(點&#xff0c;線&#xff0c;圓&#xff0c;弧等)&#xff1b;而在光柵掃描圖形顯示器中&#xff0c;采用顯示所有圖形。4、當三維物體用透視變換方程投影到觀察平面上&#xff0c;物體中不與觀察平面平行任一簇平行線投影成收…

子窗體中組合框聯動_一張表實現組合框聯動

嗨&#xff0c;大家中午好&#xff01;最近&#xff0c;有網友給我私信&#xff0c;想要一個聯動的示例&#xff0c;一個有關于部門聯動的操作。其實關于聯動的操作有很多&#xff0c;可以是組合框的聯動&#xff0c;列表框聯動&#xff0c;組合框與列表框也可以聯動&#xff0…

中如何實現文字轉語音_錄音轉文字、文字轉語音,學會這一招就夠了!手把手教你如何操作...

閱讀文章時候想著有人可以把文章讀給我聽就好了&#xff0c;寫作時想著語音直接可以轉換成文字就好了&#xff0c;大家是不是有時會突然冒出這樣的想法&#xff1f;七十這些看似天真的想法&#xff0c;還真的有辦法解決&#xff0c;這里就手把手教你如何操作才能將的文字轉換成…

圖像 理想低通濾波_圖像處理之濾波(下)

[toc]目錄一、常規濾波低通高通帶通帶阻二、非局部均值濾波三、維納濾波四、卡爾曼濾波前言所謂濾波&#xff0c;其實就是從混合在一起的諸多信號中提取出所需要的信號。信號的分類&#xff1a;確定型信號&#xff0c;可以表示為確定的時間函數&#xff0c;可確定其在任何時刻的…

泰山行宮碧霞元君祠_臨清市泰山行宮碧霞元君祠5月4號(農歷三月三十日)舉行大型泰山奶奶接駕法會...

臨清是泰山奶奶的娘家&#xff0c;每年的四月泰山奶奶要回臨清省親臨清市道教協會定于2019年農歷三月三十(5月4號星期六)于臨清桑樹園泰山行宮碧霞元君祠舉行大型泰山奶奶迎鸞接駕廟會。屆時&#xff0c;將有架鼓會、云龍會、獅胞會、鋼叉會、高蹺會、天音會、彩船會、秧歌會等…

充分條件反過來是必要條件嗎_“充分必要條件”引發的現實思考

昨天看了一篇文章是介紹“充分條件和必要條件”&#xff0c;大致就是A能直接推導出B&#xff0c;那A就是B的充分條件。A不一定能推導出B&#xff0c;但是沒A一定推導不出B&#xff0c;那A就是B必要條件。舉個簡單的例子&#xff1a;對你好&#xff08;A&#xff09;與喜歡你&am…

手機游戲降低游戲延遲的軟件_怎么降低手機網絡延遲(減少網絡延遲的5個小技巧)...

在過去的幾十年里&#xff0c;用戶或開發人員并不擔心延遲。在上世紀90年代和本世紀初&#xff0c;個人互聯網連接速度要慢得多&#xff0c;因此發送請求和接收響應之間的延遲要遠遠小于下載完成所需的時間。如今&#xff0c;更高的帶寬連接使下載速度更快&#xff0c;因此延遲…

mysql常用的開發軟件下載_強烈推薦!14款經典的MySQL客戶端軟件

【IT168 評論】不用我說&#xff0c;大家都知道MySQL是一個怎么樣的數據庫。雖然它的命運比較坎坷&#xff0c;但是絲毫沒有影響到我們對MySQL的熱情。不論是個人程序或者網站&#xff0c;還是企業數據庫&#xff0c;MySQL的身影無處不在。無論做什么數據庫的開發&#xff0c;一…

mysql最大值最小值_mysql最大值,最小值,總和查詢與計數查詢

1、最大值查詢&#xff1a;mysql> select max(score) from 4a;------------| max(score) |------------| 93 |------------1 row in set (0.06 sec)2、最小值查詢&#xff1a;mysql> select max(4a.score),min(4inall.score) from 4a,4inall;-------------------…

阿里云 centos mysql_在阿里云的CentOS環境中安裝配置MySQL的教程

1 常規錯誤的yum安裝方法&#xff1a;在前文中記述了CentOS 6.5系統中通過yum方式快速地搭建了LNMP環境&#xff0c;那么是否也能在CentOS 7或CentOS 7.1系統中依葫蘆畫瓢安裝MySql5.6.24呢&#xff1f;答案是否定的。[roottypecodes ~]# yum -y install mysql mysql-server my…

mysql文件脫機_SQL數據庫的脫機與聯機操作

online : 可對數據庫進行訪問offline&#xff1a;數據庫無法使用1、使用查詢語句select state_desc from sysdatabases where name 數據庫名 2、使用databasepropertyex( database,property)函數select databasepropertyex( 數據庫 ,’ status )分離數據庫&#xff1a;EXEC…

dockerfile 安裝mysql_dockerfile構建mysql鏡像

使用dockerfile構建mysql&#xff0c;鏡像構建完成后&#xff0c;運行容器后&#xff0c;啟動mysql服務總是報錯Fatal error: Cant open and lock privilege tables: Table storage engine for db doesnt have this optionmysql安裝使用的官方的壓縮包mysql-5.7.20-linux-glibc…

ubunt11 安裝mysql_ubuntu 11.10安裝mysql

1. 安裝devadmdevserver:~$ sudo apt-get install mysql-server......The following NEW packages will be installed:libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1mysql-c…