strings和strconv使用

1、strings使用

  • strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头。
  • strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾。

上面两个函数代码样例:

package main

import(
"fmt"
"strings"
) func urlProcess(url string) string{
result := strings.HasPrefix(url, "http://")
if !result{
url = fmt.Sprintf("http://%s", url)
}
return url
} func pathProcess(path string) string{
result := strings.HasSuffix(path, "/")
if !result{
path = fmt.Sprintf("%s/", path)
}
return path
} func main () {
var(
url string
path string
)
fmt.Scanf("%s%s", &url, &path)
url = urlProcess(url)
path = pathProcess(path)
fmt.Println(url)
fmt.Println(path)
}
  • 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):字符串替换,如果n<0会替换所有
  • 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.Fields(str string):返回str空格分隔的所有子串的slice
  • strings.Split(str string, split string):返回str split分隔的所有子串的slice
  • strings.Join(s1 []string, sep string):用sep把s1中的所有元素链接起来
package main

import (
"strings"
"fmt"
) func main(){
str := "hello world "
str1 := " hello world abc \n"
result := strings.Replace(str, "world", "you", 1)
fmt.Println("Replace:", result) count := strings.Count(str, "l")
fmt.Println("Count:", count) result = strings.Repeat(str, 3)
fmt.Println("Repeat:", result) result = strings.ToLower(str)
fmt.Println("ToLower:", result) result = strings.ToUpper(str)
fmt.Println("ToUpper:", result) result = strings.TrimSpace(str1)
fmt.Println("TrimSpace:", result) result = strings.Trim(str1, "\n\r")
fmt.Println("Trim:", result) result = strings.TrimLeft(str1, " ")
fmt.Println("TrimLeft:", result) result = strings.TrimRight(str1, "\n\r")
fmt.Println("TrimRight:", result) splitResult := strings.Fields(str)
for i := 0; i < len(splitResult); i ++ {
fmt.Println("Fields:", splitResult[i])
} splitResult = strings.Split(str, "l")
for i := 0; i < len(splitResult); i ++ {
fmt.Println("Split:", splitResult[i])
} joinResult := strings.Join(splitResult, "l")
fmt.Println("Join:", joinResult)
}

2、strconv使用

  • strconv.Itoa(i int):把一个整数i转成字符串
  • strconv.Atoi(str string)(int, error):把一个字符串转成整数
package main

import (
"fmt"
"strconv"
) func main(){
str2 := strconv.Itoa(1000)
fmt.Println("Itoa:", str2) number, err := strconv.Atoi(str2)
if err != nil {
fmt.Println("can not convert to int", err)
}
fmt.Println("Atoi:", number)
}

时间和日期类型

1、time包

2、time.Time类型,用来表示时间

const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)

3、获取当前时间, now := time.Now()

  • time.Now().Day(),time.Now().Minute(),time.Now().Month(),time.Now().Year()

func testTime() {
for {
now := time.Now()
fmt.Printf("type of now is:%T\n", now) year := now.Year()
month := now.Month()
day := now.Day() str := fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d\n", year, month, day, now.Hour(), now.Minute(), now.Second())
fmt.Println(str)
time.Sleep(time.Second) fmt.Printf("timestamp:%d\n", now.Unix())
}
}

4、time.Duration用来表示纳秒

package main

import (
"time"
"fmt"
) func test(){
time.Sleep(time.Millisecond * 100)
} func main() {
now := time.Now()
fmt.Println(now)
fmt.Println(now.Format("2006/01/02 15:04:05")) // 获取当前时间
start := time.Now().UnixNano()
test()
end := time.Now().UnixNano()
fmt.Printf("cost:%d", (end - start)/1000) // 统计一段代码的执行耗时,单位精确到微秒。
}

5、格式化,强制写下面时间,这个是go诞生时间

now := time.Now()
fmt.Println(now.Format(“02/1/2006 15:04:05”))
fmt.Println(now.Format(“02/1/2006 03:04:05”))
fmt.Println(now.Format(“2006/1/02 15:04:05”))
fmt.Println(now.Format(“2006/1/02”))

指针类型

1、普通类型,变量存的就是值,也叫值类型。指针类型存的是地址

2、获取变量的地址,用&,比如: var a int, 获取a的地址:&a

3、指针类型,变量存的是一个地址,这个地址存的才是值

4、获取指针类型所指向的值,使用 *,比如:var *p int, 使用*p获取p指向的值

5、声明一个指针类型,默认初始化nil

var p *int 

直接赋值*p = 200会报错,它是一个空指针,这个时候可以理解为它只是放入一个地址,它初始值是nil。

nil在Go中相当与其它语言中的NULL、null和None等,在实际的使用中表示某一个变量为。nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果将nil赋值给其他变量的时候将会引发panic。

两种方式使用:

方式一:

var p *int
var b int
p = &b
*p = 200

这种方式是将b的内存地址赋值给p,实际上p和b共用一个内存地址的值。因为b声明时默认它的值是0

方式二:

p = new(int)
*p = 1000

使用new关键字分配内存,这种方式*p的默认值是0。

  • demo
func test() {
var p *int //p 默认初始化nil
var b int
p = &b
*p = 200 //b = 200 if (p == &b) {
fmt.Printf("equal\n")
} fmt.Printf("%p %p %p\n", p, &b, &p) p = new(int)
fmt.Println(*p)
*p = 1000
fmt.Printf("%d\n", *p)
fmt.Printf("%p %p %p\n", p, &b, &p) if (p == &b) {
fmt.Printf("equal")
} //指针类型的变量初始化:1. 使用其他变量地址给它赋值。 2. 使用new分配
}

流程控制

1、if / else 分支判断

写法一:

if condition1 {
}

写法二:

if condition1 {
} else {
}

写法三:

if condition1 {
} else if condition2 {
} else if condition3 {
} else {
}
package main

import (
"strconv"
"fmt"
) func main() {
var str string
fmt.Scanf("%s", &str) number, err := strconv.Atoi(str)
if err != nil {
fmt.Println("can not convert to int", err)
return
}
fmt.Println("Atoi:", number)
}

2、switch case语句(不需要break)

语法:

switch var {
case var1:
case var2:
case var3:
default:
}

关键字fallthrough,可以让满足条件分支执行后,继续执行下一个分支。

package main

import "fmt"

func main() {
var a int = 10
switch a {
case 0, 1, 2:
fmt.Println("a is equal 0,1,2")
case 10:
fmt.Println("a is equal 10")
fallthrough
default:
fmt.Println("a is equal default")
}
}

样例:

package main

import (
"math/rand"
"fmt"
) func main() {
/*
随机生成一个0到100的整数n,然后用户在终端,输入数字,如果和n相等,则提示用户猜对了。如果不相等,则提示用户,大于或小于n
*/
var n int
n = rand.Intn(100)
for {
var input int
fmt.Scanf("%d\n", &input)
flag := false
switch {
case input == n:
fmt.Println("you are right")
flag = true
case input > n:
fmt.Println("bigger")
case input < n:
fmt.Println("less")
}
if flag{
break
}
}
}

3、for 语句

写法一:

for 初始化语句; 条件判断; 变量修改 {
}
package main

import "fmt"

func Print(n int){
for i := 0; i < n; i ++ {
for j :=0; j < i; j ++ {
fmt.Printf("A")
}
fmt.Println()
}
} func main() {
Print(6)
}

写法二:

for 条件 {
}

写法三:

for range 语句

func Range(){
str := "hello world,中国"
for i, v := range str {
fmt.Printf("index[%d] val[%c]\n", i, v)
}
}

写法四:break continue语句

func break_continue(){
str := "hello world,中国"
for i, v := range str {
if i > 2 {
continue
}
if i > 3 {
break
}
fmt.Printf("index[%d] val[%c]\n", i, v)
}
}

写法五: label 语句

package main

import "fmt"

func main() {
LABEL1:
for i := 0; i <= 5; i++ {
for j := 0; j <= 5; j++ {
if j == 4 {
continue LABEL1
}
fmt.Printf("i is: %d, and j is: %d\n", i, j)
}
}
}

4、goto和label 语句

package main

func main() {
i := 0
HERE:
print(i)
i++
if i == 5 {
return
}
goto HERE
}

go使用中遇到的问题总结

https://segmentfault.com/a/1190000002808365

go 基础(二)的更多相关文章

  1. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  2. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  3. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

  4. Bootstrap<基础二十七> 多媒体对象(Media Object)

    Bootstrap 中的多媒体对象(Media Object).这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的 ...

  5. Bootstrap <基础二十六>进度条

    Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...

  6. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

  7. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  8. Bootstrap <基础二十三>页面标题(Page Header)

    页面标题(Page Header)是个不错的功能,它会在网页标题四周添加适当的间距.当一个网页中有多个标题且每个标题之间需要添加一定的间距时,页面标题这个功能就显得特别有用.如需使用页面标题(Page ...

  9. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

  10. Bootstrap <基础二十一>徽章(Badges)

    Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...

随机推荐

  1. js异步回调

    简单理解:js是单线程的,Ajax请求远程数据.IO等会很耗时,引起堵塞可能会引起反应时间太长页面失去反应. 回调:A函数作为一个参数传给B函数,执行完B后再执行A: 同步回调: function A ...

  2. Java计算器(结对)

    一:题目简介 我们要做的是一个多功能计算器,Java程序编辑器是:图形界面.线程.流与文件等技术的综合应用. 图形界面的实现:考虑到简单.实用.高效等特点,就选择了Swing来完成实现,在选择组件上, ...

  3. 我的github地址

    链接:https://github.com/long0123/test.git   推送项目的github的大致步骤如下: 1.在本地创建一个项目仓库,可以放些基本的项目文件 2.cd至该目录下 3. ...

  4. 第二个spring,第一天

    陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 由于队友们都回家了,只有我在努力的写代码...

  5. WIN10基于Hyper-V下运行kubernetes入门问题

    http://www.cnblogs.com/shanyou/p/8503839.html 安装配置好之后启动,查看ip的方法: minikube status minikube ip 查看仪表盘da ...

  6. Qt_颜色选择对话框(QColorDialog)

    转自豆子空间 使用QColorDialog也很简单,Qt提供了getColor()函数,类似于QFileDialog的getOpenFileName(),可以直接获得选择的颜色. include &l ...

  7. pandas合并/连接

    Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似.Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口 - pd.me ...

  8. BatchNormalization的使用

    # import BatchNormalization from keras.layers.normalization import BatchNormalization # instantiate ...

  9. SVN上线步骤笔记

    项目代码位置: /data/svn/play_out 项目代码目录名称: test SVN创建位置:/data/svn/repos_Websvn线上地址:svn://192.168.1.1/repos ...

  10. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...