Go基础(2)
demo1:
package main import (
"fmt"
"strings"
) func main() {
url := pathToUrl("www.baidu.com", "https")
isUrl(url) } func isUrl(url string) {
http := strings.HasPrefix(url, "http://")
https := strings.HasPrefix(url, "https://")
if http || https {
fmt.Printf("%s 是一个URL", url)
} else {
fmt.Printf("%s 不是一个URL", url)
}
} func pathToUrl(path string, protocol string) string {
var result string
if protocol == "http" || protocol == "https" {
result += protocol
result += "://"
result += path
return result
} else {
return ""
}
}
分析:
1.字符串的基本使用
2.strings包还有其他的一些函数,会在下面介绍
demo2:
package main import (
"fmt"
"strconv"
"strings"
) func main() {
str := " hello world hahaha " result1 := strings.Replace(str, "world", "earth", 1)
fmt.Println(result1) // hello earth hahaha result2 := strings.Count(str, "ha")
fmt.Println(result2) // result3 := strings.ToUpper(str)
fmt.Println(result3) // HELLO WORLD HAHAHA result4 := strings.TrimSpace(str)
fmt.Println(result4) //hello world hahaha result5 := strings.Fields(str)
fmt.Println(result5) //[hello world hahaha] result6 := strings.Join(result5, "0")
fmt.Println(result6) //hello0world0hahaha result7 := strconv.Itoa(666)
fmt.Println(result7) // result8, err := strconv.Atoi("666")
if err != nil {
fmt.Println("can not convert to int:", err)
}
fmt.Println(result8) //
}
分析:
1.一些字符串的基本操作
2.其他的功能直接查文档即可,很简单
demo3:
package main import (
"fmt"
"time"
) func main() {
start := time.Now().UnixNano()
now := time.Now()
theTime := now.Format("2006/01/02 15:05:05")
fmt.Println(theTime) //2019/03/25 14:07:07
end := time.Now().UnixNano()
fmt.Printf("程序共耗时:%d微秒", (end-start)/1000)
}
分析:
1.格式化函数format,必须使用2006/01/02 15:05:05这个日期,Go规定的
2.这里统计程序运行时间的方法,在日后开发中会经常用到
demo4
package main import "fmt" func main() {
var a int = 10
fmt.Printf("%d\n", a) // var p *int = &a
fmt.Printf("%d->%d\n", p, *p) //824633794696->10 var b int = 5
//*p = b
//fmt.Println(a) //5 p = &b
fmt.Println(a) // modify(p)
fmt.Printf("a:%d b:%d\n", a, b) //a:10 b:666 modify(&a)
fmt.Printf("a:%d b:%d\n", a, b) //a:666 b:666
} func modify(p *int) {
*p = 666
return
}
分析:
1.指针的巩固练习
2.*p=b:p指向b,因为p是a的地址,所以a的值变成了b的值
3.p=&b:p是a的地址,指向a,这时候把b的地址赋值给p,但指向没有变。a,b的值都没有变,a和b的地址也没有变,*p的值变成5
4.第一次Modify:这时的p已经是b的地址了,所以如果修改了p的指向,那么其实就直接修改了b的值
5.第二次Modity:这里就是很正常地修改了a的值
demo5:
package main import "fmt" func main() {
str := "hello world!"
for index, value := range str {
fmt.Printf("index[%d] value:%c\n", index, value)
}
/*输出前三行如下
index[0] value:h
index[1] value:e
index[2] value:l
*/
}
分析:
1.除了基本地for循环,go有另一种for循环,很方便,值得学习
demo6:
package main import "fmt" type op_func func(int, int) int func add(a, b int) int {
return a + b
} func operator(op op_func, a, b int) int {
return op(a, b)
} func calc(a, b int) (sum int, avg int) {
sum = a + b
avg = (a + b) / 2
return
} func main() {
c := add
sum := c(1, 2)
fmt.Println(sum) var d op_func = add
result := operator(d, 100, 200)
fmt.Println(result) sum, avg := calc(2, 6)
fmt.Println(sum, avg)
}
分析:
1.go的函数可以赋值给一个变量,并且作为参数传递
2.go的函数可以多返回值,并且可以在函数开头给返回值赋值,在return处省略
demo7:
package main import "fmt" func add(a int, arg ...int) int {
var sum int = a
for i := 0; i < len(arg); i++ {
sum += arg[i]
}
return sum
} func concat(a string, arg ...string) (result string) {
result = a
for i := 0; i < len(arg); i++ {
result += arg[i]
}
return
} func main() {
sum := add(1, 2, 3, 4, 5)
fmt.Println(sum) result := concat("a", "b", "c", "d", "e")
fmt.Println(result)
}
分析:
1.函数支持不确定参数
demo8:
package main import "fmt" func main() {
var i int = 0
defer fmt.Println(i)
defer fmt.Println(1)
i = 10
fmt.Println(i)
} /*输出:
10
1
0
*/
分析:
1.defer语句的理解
2.defer...i...这一句先被放在栈底,然后在它上面放入defer...1...,最后再把函数本身放上。所以执行的时候,先输出10,然后是1,最后是0
3.defer的实际用途:释放资源,比如defer file.close():无论对文件做什么操作或者多么复杂的逻辑判断,最终都会释放资源
demo9:
package main import "fmt" func main() {
result := func(a int, b int) int {
return a + b
}
fmt.Println(result(1, 2))
}
分析:
1.匿名函数的简单使用
Go基础(2)的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- js术语扫盲贴:XHR、RegExp、call-apply、prototype
(1) XHR:xml httprequestXHR注入:XHR 注入技术是通过XMLHttpRest来获取javascript的.但与eval不同的是,该机制是通过创建一个script的DOM元素, ...
- composer安装以及更新问题,配置中国镜像源。
配置国内镜像源 中国镜像源 https://pkg.phpcomposer.com/ composer 中文官网地址 http://www.phpcomposer.com/ 下载 Composer 安 ...
- tkinter调取签名网而设计签名页面
# --*-- coding:utf-8 --*-- import tkinter as tk import re import requests from tkinter import messag ...
- MySQL 大数据量快速插入方法和语句优化
MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例 ...
- MySQL数据库创建表报错的解决方案
实体类 package com.tao.pojo; public class Student { private String id; private String name; private Str ...
- OpenGL执行渲染图片的主要操作步骤
一个用来执行图形渲染的OpenGL程序的主要步骤包括: 1.从OpenGL的几何图元中设置数据,用于构建形状: 2.使用不用的着色器(shader)对输入的图元数据进行进行计算,判断它们的位置.颜色以 ...
- BZOJ_4006_[JLOI2015]管道连接_斯坦纳树
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树 题意: 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m ...
- C# 在异步线程操作类的变量
如下代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } public string Me ...
- Netty实现高性能IOT服务器(Groza)之精尽代码篇中
运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...
- 5G+边缘计算,着眼可见的未来
在 2019 年 2 月巴塞罗那举办的 MWC(世界移动通讯大会)上,华为手机带来了一款超薄的 5G 折叠屏手机 Mate X.这款手机将折叠屏和 5G 结合在一起,引起了不少人的关注与舆论,而昂贵的 ...