go 数据类型和操作符
文件名&關鍵字&標識符
?? 1. 所有go源碼以 .go結尾
?? 2. 標識符以字母或者下劃線開頭,大小寫敏感:add, Add, _add
?????? _是特殊標識符,用來忽略結果
?? 3. 保留關鍵字
???
?
Go程序基本結構
package main import “fmt” func main() {fmt.Println(“hello, world”) }//1. 任何一個代碼文件隸屬于一個包 //2. import 關鍵字,引用其他包 //3. golang可執行程序,package main,并且有且只有一個main入口函數 //4. 包中函數調用:a. 同一個包中函數,直接調用b. 不同包中函數,通過 包名.函數名 進行調用 //5. 包訪問控制規則 大寫意味著這個函數/變量是可導出的小寫意味著這個函數/變量是私有的,包外部不能訪問函數聲明和注釋
1. 函數聲明: func?? 函數名字 (參數列表) (返回值列表){}
func add() {}
func add(a int , b int) int {}
func add(a int , b int) (int, int) {}
2. 注釋,兩種注釋,單行注釋: // 和多行注釋? /* */
?
常量和變量
常量
1. 常量使用const 修飾,代表永遠是只讀的,不能修改
2. const 只能修飾boolean,number(int相關類型、浮點類型、complex)和string
3. 語法:const identifier [type] = value,其中type可以省略?
const(
a = 0
b = 1
c = 2
)
const(
a = iota
b //1
c //2
)
?
變量
語法:var identifier type
var (
a int??????????? //默認為0
b string????? //默認為””
c bool??????? //默認為false
d = 8
e = “hello world”
)
值類型和引用類型
1 值類型:變量直接存儲值,內存通常在棧中分配
??? 基本數據類型int、float、bool、string以及數組和struct
2 引用類型:變量存儲的是一個地址,這個地址存儲最終的值。內存通常在堆上分配。通過GC回收。
指針、slice、map、chan等都是引用類型
變量作用域
在函數內部聲明的變量叫做局部變量,生命周期僅限于函數內部
在函數外部聲明的變量叫做全局變量,生命周期作用于整個包,如果是大寫的,則作用于整個程序。
數據類型和操作符
?1 bool類型,只能存true和false
? ? ? ? ? ?var a bool
? ? ? ? ? ?var a bool = true
? ? ? ? ? ?var a = true
?2 相關操作符 ! && ||
?3?數字類型,主要有int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64
?4?類型轉換,type(variable),比如:var a int=8; ?var b int32=int32(a)
?
package main func main() {var a intvar b int32a = 15b = a + a // compiler errorb = int32(a+a)b = b + 5 // ok: 5 is a constant }
?5?邏輯操作符: == 、!=、<、<=、>和 >=
數學操作符:+、-、*、/等等
?6?字符類型:var a byte
var a byte = 'c'7?字符串類型: var str string
8 字符串表示兩種方式: 1)雙引號 2)`` (反引號)
var str2 = `hello \n \n \n this is a test string This is a test string too·` 1 #string到int 2 int,err:=strconv.Atoi(string) 3 #string到int64 4 int64, err := strconv.ParseInt(string, 10, 64) 5 #int到string 6 string:=strconv.Itoa(int) 7 #int64到string 8 string:=strconv.FormatInt(int64,10) string, int, int64互轉幾個例子
?
1 // main 2 package main 3 4 import ( 5 "fmt" 6 ) 7 8 func is_prime(num int) bool { 9 if num == 1 { 10 return false 11 } 12 for i := 2; i < num; i++ { 13 if num%i == 0 { 14 return false 15 } 16 } 17 return true 18 } 19 20 func main() { 21 22 var count int 23 for i := 100; i <= 200; i++ { 24 if is_prime(i) { 25 count++ 26 fmt.Println(i) 27 } 28 } 29 fmt.Println("totally prime number: ", count) 30 } 100-200間的素數 1 // main 2 package main 3 4 import ( 5 "fmt" 6 "strconv" 7 ) 8 9 func is_narcissistic(num int) bool { 10 num_str := strconv.Itoa(num) 11 length := len(num_str) 12 var sum int 13 for i := 0; i < length; i++ { 14 tmp, _ := strconv.Atoi(num_str[i : i+1]) 15 //fmt.Println(tmp) 16 sum += tmp * tmp * tmp 17 18 } 19 20 if sum == num { 21 return true 22 } 23 return false 24 } 25 26 func main() { 27 var count int 28 for i := 100; i < 1000; i++ { 29 if is_narcissistic(i) { 30 count++ 31 fmt.Println(i) 32 } 33 } 34 fmt.Println("total number: ", count) 35 } 100-999種所有的水仙花數 1 // main 2 package main 3 4 import ( 5 "fmt" 6 ) 7 8 func factorial(num int) int { 9 var result = 1 10 for i := 1; i <= num; i++ { 11 result *= i 12 } 13 return result 14 } 15 16 func factorial_sum(num int) int { 17 var sum int 18 for i := 1; i <= num; i++ { 19 sum += factorial(i) 20 } 21 return sum 22 } 23 24 func main() { 25 res := factorial_sum(3) 26 fmt.Println(res) 27 } n的階乘之和8.1 ? strings和strconv使用
strings.HasPrefix(s string, prefix string) bool:判斷字符串s是否以prefix開頭 。
strings.HasSuffix(s string, suffix string) bool:判斷字符串s是否以suffix結尾
strings.Index(s string, str string) int:判斷str在s中首次出現的位置,如果沒有出現,則返回-1
strings.LastIndex(s string, str string) int:判斷str在s中最后出現的位置,如果沒有出現,則返回-1
strings.Replace(str string, old string, new string, n int):字符串替換
strings.Count(str string, substr string)int:字符串計數
strings.Repeat(str string, count int)string:重復count次str
strings.ToLower(str string)string:轉為小
strings.ToUpper(str string)string:轉為大寫
strings.TrimSpace(str string):去掉字符串首尾空白字符
strings.Trim(str string, cut string):去掉字符串首尾cut字符
strings.TrimLeft(str string, cut string):去掉字符串首cut字符
strings.TrimRight(str string, cut string):去掉字符串首cut字符
strings.Field(str string):返回str空格分隔的所有子串的slice
strings.Split(str string, split string):返回str split分隔的所有子串的slice
strings.Join(s1 []string, sep string):用sep把s1中的所有元素鏈接起來
strings.Itoa(i int):把一個整數i轉成字符串
strings.Atoi(str string)(int, error):把一個字符串轉成整數
?
9 時間 和日期類型
9.1. time包
9.2. time.Time類型,用來表示時間
9.3. 獲取當前時間, now := time.Now()
9.4. time.Now().Day(),time.Now().Minute(),time.Now().Month(),time.Now().Year()
9.5. 格式化,fmt.Printf(“%02d/%02d%02d %02d:%02d:%02d”, now.Year()…)
9.6?. time.Duration用來表示納秒
9.7. 一些常量:
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
9.8. 格式化:
now := time.Now()
fmt.Println(now.Format(“02/1/2006 15:04”))
fmt.Println(now.Format(“2006/1/02 15:04”))
fmt.Println(now.Format(“2006/1/02”))
?
10 指針類型
10.1. 普通類型,變量存的就是值,也叫值類型
10.2. 獲取變量的地址,用&,比如: var a int, 獲取a的地址:&a
10.3. 指針類型,變量存的是一個地址,這個地址存的才是值
10.4. 獲取指針類型所指向的值,使用:*,比如:var *p int, 使用*p獲取p指向的值
?
轉載于:https://www.cnblogs.com/cedrelaliu/p/7026615.html
總結
以上是生活随笔為你收集整理的go 数据类型和操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 时间操作类
- 下一篇: poj 3590 The shuffle